Software Reusability and Efficiency

ثبت نشده
چکیده

output. The output of the code generator often needs further processing before it is complete. Automatic code generation is enabled by generative programming. A main goal of generative programming is to replace manual search, adaptation, implementation, and assembly of components with on-demand automatic generation of these components. Generative programming focuses on maximizing the automation of application development: given a system specification, generators use a set of reusable components to generate a (lower-level) concrete system (implementation). Generative programming is about designing and implementing software modules which can be combined to generate specialized and highly optimized systems with specific requirements. The goals are manifold: (i) reduce the conceptual gap between program code and domain concepts, (ii) achieve high reusability and adaptability, (iii) simplify managing many variants of a component, (iv) increase efficiency both in code size and code execution time, and (v) increase productivity. Generative programming introduces the notion of a domain-specific language. This is a programming or executable specification language that offers, through appropriate notations and abstractions, expressive power in a particular problem domain. Compilers for programming languages like Fortran, C, C++, and Java, are some of the best developed code generators in existence. They not only generate executable files that can be executed by a machine but also evaluate large parts of the higher-level source code and try to reduce it to a more efficient implementation by taking the (hardware and software) context into consideration. In doing so, the actual programming language can be aimed more at the problem domain, while the task of finding an efficient implementation is moved to the compiler. Code generators are very powerful tools that facilitate software reuse. When tailored to the application domain, they may be able to -automaticallyretrieve and adapt code as well as documents. Examples are the so-called ’experts’ or ’wizards’ in development environments for microcomputer systems, which produce working skeletons for the program based on an interactively built specification. Other examples of generative technology are automatic configuration management, preprocessing (e.g., macro-expansion), and meta-programming. Unfortunately, developing application generators and component generators is hard, as it requires being knowledgeable and experienced both in language design and compiler development. Recent developments such as XML-based technologies and template metaprogramming made generative programming more accessible to developers and thus revived the interest in generative programming. 2.5 Impact of Open Source Open source [42, 60] presents one of the most interesting and influential trends in the software community over the past decade. Many software developers and organizations consider open source as a way to provide greater flexibility in their development prac2.5 Impact of Open Source 18 tices, jump-start their development efforts by reusing existing code, and get access to a much broader group of users or market. As a result of the activity of the open source movement, there is now a vast amount of reusable software available that developers can use. There are many open source products that have become a basic building block in the software development process. Examples include EMACS, various GNU software, and scripting languages as Perl, PHP, and Tcl. Open source projects often focus around popular products such as Linux. The open source approach is perhaps today’s most successful form of large scale software reuse. Open source software is available for many activities, is often supported on many platforms, and can be used in many academic and industrial (business) domains. The public image of an open source project is often that of a chaotic series of actions that by some miracle results in software that compiles and executes. The reality is however different. The open source movement has evolved toward a well-defined development process geared to unique requirements: coordination of a large number of code developers across the Internet bound together by common goals and interests. Open source approaches to software development have proven that complex, mission critical software can be developed by distributed teams of developers. The open source movement appears to be a diverse collection of different ideas, knowledge, techniques, and solutions. However, all activities are motivated by the recognition of the benefits of broader and more open access to the software development process. Elements of the open source development process include the broadening the notion of a project team, greater collaboration across geographically dispersed teams enabled by the Internet, frequent releases of software builds, and the creation of publicly available source code for adaptation and reuse. The open source approach is often a planned strategy to augment a popular free product, to take advantage of a wide informal network of developers and users, and to minimize the use of internal development resources. Besides the tangible result in the form of software, there are two other important aspects to open source [60]: • the business model. By ’giving away’ part of the intellectual property, one gets in return access to a much larger market or user base. However, before a company uses an open source model for the development of some product, it will have to weigh several factors. These include for example the potential that the software becomes a key platform for others, the impact on the revenue model, identified market-need, and gaining momentum among a community of developers and users. • the development process. Characteristics include the encouragement of a wide community of users, testers and developers, frequent and vigorous communication with developers, frequent software releases, strong project coordination, responsiveness, and transparency in the development process. Many people believe that open source is mostly a licensing issue, but there is more to it: • release of open source code broadens its user base and encourages third-party participation; it also leverages the skills of a wider base of talented software engineers 2.5 Impact of Open Source 19 • open source breaks the monopoly on software products and development by a few large software vendors • open source enhances code reuse • open source allows frequent releases of software systems in line with users expectations for greater responsiveness and shorter development cycle times • open source relates to ethical aspects of software that are concerned with freedom of use and participation. The open source operating system Linux has gained a large momentum over the past ten years. Much of this was due to its similarity to proprietary UNIX-based operating systems (e.g., IBM/AIX, SGI/IRIX, HP/HP-UX) but also to the perceived lack of reliability and speed of the Microsoft Windows platform and to the failure of other vendors to offer low-priced alternatives. As a result, many commercial organizations are now looking to deploy solutions to a target platform containing a number of open source products. They are attracted by the low cost of powerful server farms composed of commodity off-theshelf hardware (clusters of PCs or small SMPs) running open source software. In a commercial setting, licensing is a major consideration whether or not to use open source software. Open source licenses are typically straightforward, but their implications on any systems reusing that software can be profound. According to many open source licenses, the system reusing the software must also be considered open source and be subject to the same licensing agreements (see for example the GNU General Public License GPL [42]). Software development with a commercial potential or objective is therefore at risk from infringements of any such open source licensing clauses. Software reliability and security is another major consideration whether or not to use open source software. These considerations are often motivated by concerns on the quality of the software, how it was developed, and in particular what are the origins of the software (or parts of it). It is worthwhile to note that if the open source software has a large user base and active developer community, then this software is likely to be better tested and examined than any proprietary commercial code. The maximal use of open source software and minimal dependency on proprietary technology is nowadays often considered an effective step to ensure the portability of an application. An unknown parameter for proprietary software is often when the closed-source library or tool or code generator or network protocol will no longer be supported (’end-oflifed’), or when the interface will be altered in a backward-incompatible way. With open source code, one has always access to the source code. The interfaces of the leading-edge version of the open source software may change, but having access to the source code facilitates the modification and porting of the application. Finally, we mention that SourceForge [17] is an internet site for software specifically designed to support collaborative development. It is an archive as well as a free developmenthosting service. At the time of writing this document, it is undoubtedly one of the largest repositories of open source activity in the world. For more information on open source, we refer to [11, 30, 42].

برای دانلود رایگان متن کامل این مقاله و بیش از 32 میلیون مقاله دیگر ابتدا ثبت نام کنید

ثبت نام

اگر عضو سایت هستید لطفا وارد حساب کاربری خود شوید

منابع مشابه

The Effect of Reusability on Perceived Competitive Performance of Australian Software Firms

This study set out to investigate how software firms can manage their software development efforts in order to compete effectively. Based on previous studies, a research model was developed. Reusability was expected to positively influence process flexibility, process productivity and process predictability. In turn these software process performance dimensions were expected to influence percei...

متن کامل

Performance Evaluation of Reusable Software Components

For the enhancement of quality in the software development, to eliminate the repeated work and to improve the efficiency, we require a effective solution that is software reuse. But how to identify and evaluate the performance of reusable software from the existing systems has remained the task for developers. Defining metrics to reusable components has given the structural analysis to the diff...

متن کامل

Impact of Training Function Based Neural Network on Reusable Software Modules

For the enhancement of quality in the software development, to eliminate the repeated work and to improve the efficiency, we require a effective solution that is software reuse. But how to identify and evaluate the performance of reusable software from the existing systems has remained the task for developers. Defining metrics to reusable components has given the structural analysis to the diff...

متن کامل

10.12753/2066-026x-14-000 Strategies and Tools to Enable Reuse in Serious Games Ecosystens and Beyond

Software ecosystems are defined as collections of organizations that are related through software or a software related concept. Within such ecosystems, reusability is fundamental to software sustainability and cost-efficiency. Design for reusability brings the technical promise of high quality software that emerges from clean design, fitness for a purpose and a low defect count. This ensures t...

متن کامل

Software Evolution, MDA and Design Pattern Components

The success of MDA depends on the definition of model transformations and component libraries which make a significant impact on tools that provide support for MDA. MDA is a young approach and several technical issues are not adequately addressed. For instance, existing MDA-based CASE tools do not provide adequate support to deal with component-based reuse (CASE, 2009). In light of this, we pro...

متن کامل

Quantifying Functional Reuse from Object Oriented Requirements Specifications

Software reuse is essential in improving efficiency and productivity in the software development process. This paper analyses reuse within requirements engineering phase by taking and adapting a standard functional size measurement method, COSMIC FFP. Our proposal attempts to quantify reusability from Object Oriented requirements specifications by identifying potential primitives with a high le...

متن کامل

ذخیره در منابع من


  با ذخیره ی این منبع در منابع من، دسترسی به آن را برای استفاده های بعدی آسان تر کنید

عنوان ژورنال:

دوره   شماره 

صفحات  -

تاریخ انتشار 2004